import pandas as pd
import matplotlib.pyplot as plt

# 设置中文字体（如果需要显示中文）
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

# 读取Excel文件
file_path = '门店销售占比及菜品类别分析.xlsx'
df = pd.read_excel(file_path, sheet_name='Sheet1')

print("数据读取成功！")
print(f"数据形状: {df.shape}")
print("\n前5行数据:")
print(df.head())

# 1. 菜品类别销售占比饼图
print("\n" + "=" * 50)
print("菜品类别销售占比分析")
print("=" * 50)

# 按菜品类别分组，计算每个类别的总销售占比
category_sales = df.groupby('主要菜品类别')['销售占比(%)'].sum().reset_index()
category_sales = category_sales.sort_values('销售占比(%)', ascending=False)

print("各品类销售占比:")
for _, row in category_sales.iterrows():
    print(f"{row['主要菜品类别']}: {row['销售占比(%)']:.2f}%")

# 绘制菜品类别饼图
plt.figure(figsize=(12, 10))

plt.subplot(2, 1, 1)
colors_category = ['#FF6B6B', '#4ECDC4', '#FFD166', '#06D6A0', '#118AB2']
wedges1, texts1, autotexts1 = plt.pie(category_sales['销售占比(%)'],
                                      labels=category_sales['主要菜品类别'],
                                      autopct='%1.1f%%',
                                      startangle=90,
                                      colors=colors_category)

# 美化百分比文字
for autotext in autotexts1:
    autotext.set_color('white')
    autotext.set_fontweight('bold')

plt.title('菜品类别销售占比分布', fontsize=16, fontweight='bold')
plt.axis('equal')

# 2. 单店销售占比饼图
plt.subplot(2, 1, 2)

# 按销售占比排序，便于饼图显示
df_sorted = df.sort_values('销售占比(%)', ascending=False)

# 为不同类别设置颜色映射
category_colors = {
    '主食': '#FF6B6B',
    '饮品': '#4ECDC4',
    '小吃': '#FFD166',
    '甜点': '#06D6A0',
    '其他': '#118AB2'
}

# 为每个门店分配颜色
colors_store = [category_colors[cat] for cat in df_sorted['主要菜品类别']]

# 绘制单店饼图（由于门店较多，调整文字大小）
wedges2, texts2, autotexts2 = plt.pie(df_sorted['销售占比(%)'],
                                      labels=df_sorted['门店ID'],
                                      autopct='%1.1f%%',
                                      startangle=90,
                                      colors=colors_store,
                                      textprops={'fontsize': 6})

# 美化百分比文字
for autotext in autotexts2:
    autotext.set_fontsize(6)
    autotext.set_fontweight('bold')

plt.title('各门店销售占比分布', fontsize=16, fontweight='bold')
plt.axis('equal')

# 添加图例显示菜品类别
from matplotlib.patches import Patch

legend_elements = [Patch(facecolor=color, label=category)
                   for category, color in category_colors.items()]
plt.legend(handles=legend_elements, title="菜品类别", loc="center left", bbox_to_anchor=(1, 0.5))

plt.tight_layout()
plt.show()

# 分析结果输出
print("\n" + "=" * 50)
print("优化建议分析")
print("=" * 50)

# 分析每个类别的表现
for _, row in category_sales.iterrows():
    category = row['主要菜品类别']
    percentage = row['销售占比(%)']

    if percentage > 20:
        print(f"✓ {category}: {percentage:.2f}% - 表现优秀，可考虑推出新品")
    elif percentage < 5:
        print(f"⚠ {category}: {percentage:.2f}% - 表现不佳，建议淘汰或优化")
    else:
        print(f"○ {category}: {percentage:.2f}% - 表现稳定，保持现状")

# 详细统计信息
print("\n" + "=" * 50)
print("详细统计信息")
print("=" * 50)
category_stats = df.groupby('主要菜品类别').agg({
    '销售占比(%)': 'sum',
    '门店ID': 'count',
    '销售数量': 'sum'
}).rename(columns={
    '销售占比(%)': '总销售占比(%)',
    '门店ID': '门店数量',
    '销售数量': '总销售数量'
})
category_stats['平均销售占比(%)'] = category_stats['总销售占比(%)'] / category_stats['门店数量']
category_stats['平均销售数量'] = category_stats['总销售数量'] / category_stats['门店数量']

print(category_stats.round(2))

# 门店表现分析
print("\n" + "=" * 50)
print("门店表现分析")
print("=" * 50)

# 计算平均销售占比
avg_sales = df['销售占比(%)'].mean()
print(f"平均销售占比: {avg_sales:.2f}%")

# 找出表现最好和最差的门店
top_3_stores = df_sorted.head(3)
bottom_3_stores = df_sorted.tail(3)

print(f"\n表现最佳的前3家门店:")
for _, store in top_3_stores.iterrows():
    print(f"  {store['门店ID']}: {store['销售占比(%)']}% - {store['主要菜品类别']}")

print(f"\n表现最差的后3家门店:")
for _, store in bottom_3_stores.iterrows():
    print(f"  {store['门店ID']}: {store['销售占比(%)']}% - {store['主要菜品类别']}")

# 按类别分析门店数量
category_count = df['主要菜品类别'].value_counts()
print(f"\n各品类门店数量分布:")
for category, count in category_count.items():
    avg_per_store = category_sales[category_sales['主要菜品类别'] == category]['销售占比(%)'].values[0] / count
    print(f"  {category}: {count}家门店，平均每家占比: {avg_per_store:.2f}%")